package com.pzj.export;

import com.pzj.export.config.CellColConfig;
import com.pzj.export.util.PropertyValueUtil;

public class ExportRowDataBaseHolder implements ExportRowDataHolder {
	/**
	 * 根据配置获得一行的数据，数据按配置中的顺序设置排列。
	 * @param target 行数据
	 * @param cellColConfigArr 单元格配置数组
	 * @return 
	 */
	@Override
	public <T> String[] getOneRowData(T target,
			CellColConfig<T>[] cellColConfigArr) {
		return getOneRowDataAddSerialNumber(target, cellColConfigArr, null);
	}

	/**
	 * 根据配置获得一行的数据，数据按配置中的顺序设置排列。 并在数组第一个值添加序号。
	 * @param tareget 行数据对象
	 * @param cellColConfigArr 单元格配置数组
	 * @param serialNumber 当为null时，不添加序号。
	 * @return
	 */
	@Override
	public <T> String[] getOneRowDataAddSerialNumber(T tareget,
			CellColConfig<T>[] cellColConfigArr, String serialNumber) {

		String[] result = new String[cellColConfigArr.length];

		int i = 0;

		if (serialNumber != null) {
			result[i++] = serialNumber;
		}

		for (; i < cellColConfigArr.length; i++) {
			CellColConfig<T> cellColConfig = cellColConfigArr[i];
			// 转换对象进行自定义的转换
			if(cellColConfig.getCellStransformer() != null) {
				result[i] = cellColConfig.getCellStransformer().transform(tareget);
			} else {
				result[i] = PropertyValueUtil.getValueParseString(tareget,
						cellColConfig.getFieldName(),
						cellColConfig.getFormatPattern(), "");
			}
		}

		return result;
	}

	/**
	 * 添加序号
	 * @param cellColArr 单元格配置数组
	 * @return
	 */
	@Override
	public <T> CellColConfig<T>[] addSerialNumber(CellColConfig<T>[] cellColArr) {
		@SuppressWarnings("unchecked")
		CellColConfig<T>[] addSerialNumberArr = new CellColConfig[cellColArr.length + 1];

		CellColConfig<T> cellColConfig = new CellColConfig<T>();
		cellColConfig.setColHeader("序号");
		cellColConfig.setFieldName("serial");
		cellColConfig.setBackgroundGray(cellColArr[0].isBackgroundGray());
		cellColConfig.setWidth(8); // 默认序号列宽度8毫米。
		addSerialNumberArr[0] = cellColConfig;

		for (int i = addSerialNumberArr.length - 1; i > 0; i--) {
			addSerialNumberArr[i] = cellColArr[i - 1];
		}
		cellColArr = addSerialNumberArr;
		return cellColArr;
	}
}
